home *** CD-ROM | disk | FTP | other *** search
- // Methodes generiques pour les objets V0.27
- // (C) 1992 Christophe PASSUELLO
- // Thu Jan 21 12:03:55 1993
-
- #include <mytypes.h>
- #define INTUITION_PREFERENCES_H 0
- #include <intuition/intuition.h>
- #include "IObject_priv.h"
-
- IMPORT UBYTE Pen1, Pen2;
-
- PRIVATE struct Object *ActiveObject=NULL;
- PRIVATE ULONG ActiveFlags=NULL;
-
-
- //
- // Fonction que ne fait rien
- //
- VOID DoNothing()
- {
- }
-
-
- //
- // Renvoie le ObjectID
- //
- UWORD GetObjectID(struct Object *obj)
- {
- return (obj->ObjectID);
- }
-
-
- //
- // Recupere le HotKey d'un Object
- //
- UBYTE GetHotKey(struct Object *obj)
- {
- STRPTR label;
-
- if (obj->Flags & OBJ_DISABLED)
- return (0);
-
- if (obj->Flags & LABEL_HOT_KEY)
- {
- label = strchr(obj->LabelText, '_');
- return (label[1]);
- }
- else
- return (0);
- }
-
-
- //
- // Libere un Objet
- //
- VOID DisposeObject(struct Object *obj)
- {
- CloseFont(obj->Font);
- FreeMem(obj, (LONG) obj->TMV->Size);
- }
-
-
- //
- // Ajoute un objet a une fenetre
- //
- VOID AddObject(struct ObjectGad *obj, struct Window *w, struct Requester *r)
- {
- if (!obj->window)
- {
- AddGadget(w, &obj->Gadget, -1);
- obj->window = w;
- }
- }
-
-
- //
- // Retirer un objet de la fenetre
- //
- VOID RemoveObject(struct ObjectGad *obj)
- {
- if (obj->window)
- {
- RemoveGList(obj->window, &obj->Gadget, 1);
- obj->window = NULL;
- }
- }
-
-
- //
- // Ghoste un ObjectGad
- //
- VOID OffObjectGad(struct ObjectGad *obj)
- {
- OffGadget(&obj->Gadget, obj->window, obj->requester);
- obj->Flags |= OBJ_DISABLED;
- }
-
-
- //
- // Initialise les champs communs aux objets
- //
- VOID InitObject(struct Object *obj, struct NewObject *newobj)
- {
- obj->Flags = newobj->Flags;
- obj->LabelText = newobj->LabelText;
- obj->Font = LoadFont(newobj->Font);
- obj->ClassFlags = newobj->ClassFlags;
- COPY_BOX(&obj->BorderBox, &newobj->LeftEdge);
- }
-
- //
- // Initailise les champs des objectgad
- //
- VOID InitObjectGad(struct ObjectGad *obj, struct NewObject *newobj)
- {
- InitObject( (struct Object *)obj, newobj);
- COPY_BOX(&obj->Gadget.LeftEdge, &newobj->LeftEdge);
- obj->Gadget.GadgetID = OBJECTID;
- obj->Gadget.UserData = obj;
- }
-
-
- //
- // Ajuste une boite suivant la type de bordure (simple on double)
- //
- VOID AdjustBox(struct Box *inner, BOOL single)
- {
- if (single)
- {
- // BOX_1
- inner->x += 2; inner->y += 1;
- inner->w -= 4; inner->h -= 2;
- }
- else
- {
- // BOX_2
- inner->x += 4; inner->y += 2;
- inner->w -= 8; inner->h -= 4;
- }
- }
-
-
- //
- // Efface le dessin d'un objet
- //
- VOID EraseObjectFrame(struct Object *obj, struct Box *box)
- {
- struct TextEnv env;
- struct RastPort *rp;
-
- // verifie que l'Object est dans une fenetre
- if (obj->window)
- {
- rp = obj->window->RPort;
- SaveTextEnv(rp, &env);
-
- FastEraseBox(box, rp);
- EraseObjectLabel(obj, box);
-
- RestoreTextEnv(rp, &env);
- }
- }
-
-
- //
- // Affiche le Label d'un objet par rapport a une boite
- //
- VOID PrintObjectLabel(struct Object *obj, struct Box *box)
- {
- struct RastPort *rp;
-
- if (obj->LabelText)
- {
- UBYTE coul;
-
- rp = obj->window->RPort;
- SetFont(rp, obj->Font);
-
- coul = (obj->Flags & LABEL_PEN2) ? Pen2 : Pen1;
- SetAPen(rp, coul);
- PrintLabelText(rp, box, obj->LabelText, obj->Flags & LABEL_MASK);
- }
- }
-
-
- //
- // Efface le Label d'un objet par rapport a une boite
- //
- VOID EraseObjectLabel(struct Object *obj, struct Box *box)
- {
- struct RastPort *rp;
-
- if (obj->LabelText)
- {
- rp = obj->window->RPort;
- SetFont(rp, obj->Font);
- EraseLabelText(rp, box, obj->LabelText, obj->Flags & LABEL_MASK);
- }
- }
-
-
- //
- // Initialise l'objet Actif pour FindObjectMsg
- //
- VOID SetActiveObject(struct Object *obj, ULONG Flags)
- {
- ActiveObject = obj;
- ActiveFlags = Flags;
- }
-
-
- //
- // Cherche l'objet associe a l'IntuiMessage
- // Renvoie NULL si pas d'objet associe
- //
- struct Object *FindObjectMsg(struct IntuiMessage *msg)
- {
- struct Gadget *gad;
-
- // si un objet est deja actif
- if (ActiveObject && (msg->Class & ActiveFlags))
- return (ActiveObject);
- else
- {
- // pas d'objet actif
- if (msg->Class & (GADGETUP|GADGETDOWN))
- {
- // c'est un gadget
- gad = msg->IAddress;
- if (gad->GadgetID == OBJECTID)
- return (gad->UserData);
- }
- }
- return (NULL);
- }
-